package com.xpengplayer.ui;

import androidx.appcompat.app.AppCompatActivity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.view.MenuItem;
import android.widget.Toast;

import com.xpengplayer.R;
import com.xpengplayer.update.UpdateChecker;
import com.xpengplayer.update.UpdateDialog;
import com.xpengplayer.update.UpdateInfo;
import com.xpengplayer.update.UpdateManager;

/**
 * 设置页面活动
 * 用于管理应用的设置选项
 */
public class SettingActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_setting);
        
        // 设置ActionBar返回按钮
        if (getSupportActionBar() != null) {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setTitle("设置");
        }
        
        // 加载设置Fragment
        getFragmentManager().beginTransaction()
                .replace(R.id.settings_container, new SettingsFragment())
                .commit();
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            finish();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    
    /**
     * 设置Fragment，使用传统的PreferenceFragment实现
     */
    public static class SettingsFragment extends PreferenceFragment {
        private UpdateChecker updateChecker;
        private UpdateManager updateManager;
        private UpdateDialog updateDialog;
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);
            
            // 初始化更新管理器
            updateManager = UpdateManager.getInstance(getActivity());
            updateChecker = UpdateChecker.getInstance(getActivity());
            
            // 设置版本信息
            setVersionInfo();
            
            // 设置手动检查更新的点击事件
            Preference manualCheckUpdatePref = findPreference("pref_manual_check_updates");
            if (manualCheckUpdatePref != null) {
                manualCheckUpdatePref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
                    @Override
                    public boolean onPreferenceClick(Preference preference) {
                        checkForUpdatesManually();
                        return true;
                    }
                });
            }
            
            // 设置更新回调
            updateManager.setUpdateCallback(new UpdateManager.UpdateCallback() {
                @Override
                public void onUpdateAvailable(UpdateInfo updateInfo) {
                    // 发现新版本，显示更新对话框
                    showUpdateDialog(updateInfo);
                }
                
                @Override
                public void onUpdateNotAvailable() {
                    // 没有新版本，显示提示
                    Toast.makeText(getActivity(), "当前已是最新版本", Toast.LENGTH_SHORT).show();
                }
                
                @Override
                public void onNoUpdate() {
                    // 没有更新，与onUpdateNotAvailable功能类似
                    Toast.makeText(getActivity(), "当前已是最新版本", Toast.LENGTH_SHORT).show();
                }
                
                @Override
                public void onError(String errorMessage) {
                    // 检查更新出错，显示错误信息
                    Toast.makeText(getActivity(), "检查更新失败: " + errorMessage, Toast.LENGTH_SHORT).show();
                }
                
                @Override
                public void onDownloadProgress(int progress, long bytesDownloaded, long totalBytes) {
                    // 更新进度在UpdateDialog中处理
                }
                
                @Override
                public void onDownloadComplete(java.io.File apkFile) {
                    // 下载完成在UpdateDialog中处理
                }
                
                @Override
                public void onDownloadFailed(String errorMessage) {
                    // 下载失败在UpdateDialog中处理
                }
            });
        }
        
        /**
         * 设置版本信息
         */
        private void setVersionInfo() {
            try {
                PackageInfo packageInfo = getActivity().getPackageManager()
                        .getPackageInfo(getActivity().getPackageName(), 0);
                String versionName = packageInfo.versionName;
                int versionCode = packageInfo.versionCode;
                
                Preference versionPref = findPreference("pref_app_version");
                if (versionPref != null) {
                    versionPref.setSummary(versionName + " (" + versionCode + ")");
                }
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }
        }
        
        /**
         * 手动检查更新
         */
        private void checkForUpdatesManually() {
            // 检查网络状态（可选）
            // 开始检查更新
            Toast.makeText(getActivity(), "正在检查更新...", Toast.LENGTH_SHORT).show();
            updateChecker.checkForUpdates();
        }
        
        /**
         * 显示更新对话框
         */
        private void showUpdateDialog(UpdateInfo updateInfo) {
            if (updateDialog != null && updateDialog.isShowing()) {
                updateDialog.dismiss();
            }
            
            // 创建更新对话框
            updateDialog = new UpdateDialog(getActivity(), updateInfo, updateManager);
            updateDialog.setOnUpdateListener(new UpdateDialog.OnUpdateListener() {
                @Override
                public void onUpdate() {
                    // 用户点击更新按钮
                    updateManager.downloadApk(updateInfo.getApkUrl());
                }
                
                @Override
                public void onCancel() {
                    // 用户取消更新
                    // 如果是强制更新，则不能取消
                    if (updateInfo.isForceUpdate()) {
                        getActivity().finish();
                    }
                }
                
                @Override
                public void onRetry() {
                    // 用户点击重试按钮
                    updateManager.downloadApk(updateInfo.getApkUrl());
                }
            });
            
            // 显示对话框
            updateDialog.show();
        }
    }
}